package com.datareport.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 统计结果实体类（支持动态表名）
 * 按规则ID+日期动态建表，表名格式：stat_result_{ruleId}_{yyyyMMdd}
 */
@Data
@TableName("")
public class StatResult {
    
    @TableId(type = IdType.ASSIGN_UUID)
    private String resultId;
    
    private String ruleId;        // 规则ID
    
    private String groupKey;      // 分组键（JSON格式存储分组字段值）
    
    private Double sumValue;      // 求和值
    
    private Double avgValue;      // 平均值
    
    private Double maxValue;      // 最大值
    
    private Double minValue;      // 最小值
    
    private Long countValue;      // 计数值
    
    private LocalDateTime statTime;  // 统计时间
    
    private LocalDateTime createTime; // 创建时间
    
    @TableField(exist = false)
    private String tableName;     // 动态表名（不映射到数据库字段）
    
    /**
     * 获取动态表名
     * @param ruleId 规则ID
     * @param date 日期
     * @return 动态表名
     */
    public static String getDynamicTableName(String ruleId, LocalDateTime date) {
        String dateStr = date.toLocalDate().toString().replace("-", "");
        return "stat_result_" + ruleId + "_" + dateStr;
    }
    
    /**
     * 获取动态表名（当前日期）
     * @param ruleId 规则ID
     * @return 动态表名
     */
    public static String getDynamicTableName(String ruleId) {
        return getDynamicTableName(ruleId, LocalDateTime.now());
    }
    
    /**
     * 设置动态表名
     * @param ruleId 规则ID
     * @param date 日期
     */
    public void setDynamicTableName(String ruleId, LocalDateTime date) {
        this.tableName = getDynamicTableName(ruleId, date);
    }
    
    /**
     * 设置动态表名（当前日期）
     * @param ruleId 规则ID
     */
    public void setDynamicTableName(String ruleId) {
        setDynamicTableName(ruleId, LocalDateTime.now());
    }
}